import com.itheima.Cat;

import java.lang.reflect.Method;

public class Task {
    public static void main(String[] args) throws Exception {

        testGetMethods();
        testGetMethod();

    }

    public static Method[] testGetMethods() {
        //  反射第一步：先得到Class对象。
        Class<Cat> c = Cat.class;

        // 获取类的全部成员方法，遍历这个数组中的每个方法对象
        Method[] methods /* TODO */;
        for (Method method : methods) {
            printMethod(method);
        }
        System.out.println("------------------------------------");
        return methods;
    }

    public static void testGetMethod() throws Exception {
        //  反射第一步：先得到Class对象。
        Class<Cat> c = Cat.class;
        
        // 获取run方法并打印：无参数
        Method run /* TODO */; // 拿run方法，无参数的run
        printMethod(run);

        // 获取eat方法并打印：有参数String.class
        Method eat /* TODO */;
        printMethod(eat);
        
        System.out.println("------------------------------------");

        Cat cat = new Cat();
        // 执行run方法，并打印返回值
        // 注意：
        //      1. 这里的run是Method对象，不是Cat对象的run方法
        //      2. run方法的权限修饰符是private的，所以必须先设置run的访问权限
        /* TODO */

        // 执行eat(String name)方法，并打印返回值
        /* TODO */
    }

    private static void printMethod(Method method) {
        System.out.printf(
                "%s 参数个数：%d 返回值类型：%s%n",
                method.getName(),
                method.getParameterCount(),
                method.getReturnType()
        );
    }
}